package internal

import (
	"crypto/md5"
	"fmt"
	"github.com/name5566/leaf/gate"
	"github.com/name5566/leaf/log"
	"reflect"
	"server/db"
	"server/msg/jsonData"
	"strings"
)

func init() {
	handler(&jsonData.MsgLoginReq{}, Login)
}
func handler(m interface{}, h interface{}) {
	skeleton.RegisterChanRPC(reflect.TypeOf(m), h)
}

type Account struct {
	Pid   string `bson:"pid"`
	Token string `bson:"token"`
}

func Login(args []interface{}) {
	// 收到的 Hello 消息
	m := args[0].(*jsonData.MsgLoginReq)
	// 消息的发送者
	a := args[1].(gate.Agent)
	var PId string
	var result Account
	err := db.Db.FindOne("account", map[string]interface{}{"token": m.Token}, &result)
	if err != nil {
		PId = sign(m.Token, string(m.ShowAreaId))
		//data := map[string]interface{}{
		//	"pid": PId,
		//	"uid": m.Token,
		//}
		data := Account{Pid: PId, Token: m.Token}
		db.Db.Insert("account", data)
	} else {
		PId = result.Pid
	}
	// 输出收到的消息的内容
	log.Debug("hello %v", m.Token)

	// 给发送者回应一个 Hello 消息
	// 给发送者回应一个 Hello 消息
	a.WriteMsg(&jsonData.MsgRes{
		Ret:    0,
		UserId: PId,
	})
}

const appKey = "a893e8177a5a4a5eb23833fa7a0278a9"

func sign(token, gameId string) string {
	rawStr := token + gameId + appKey
	return strings.ToUpper(fmt.Sprintf("%x", md5.Sum([]byte(rawStr))))
}
